package com.symc.his.api.impl.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;

/**
 * @Description: 基于Mybatis plus 的BaseMapper做扩展
 * @CreateTime: 2023/3/5 19:19
 * @Version:
 * @Since: 1.8
 * @Author: 辛凤文 forward.seen@foxmail.com
 */
public interface BaseMapper<T> extends com.baomidou.mybatisplus.core.mapper.BaseMapper<T> {

    /**
     * 根据 entity 条件，查询当页记录（并翻页）
     * 支持 MYSQL分页
     * 该接口为自定义扩展接口，该total为总数据条数
     *
     * @param page         分页查询条件（可以为 RowBounds.DEFAULT）
     * @param queryWrapper 实体对象封装操作类（可以为 null）
     * @return
     */
    default <P extends IPage<T>> P selectCurrentPage(P page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper) {
        Long totalCount = selectCount(queryWrapper);
        QueryWrapper<T> wrapper = (QueryWrapper<T>) queryWrapper;
        wrapper.last("LIMIT " + page.offset() + "," + page.getSize());
        P currentPage = selectPage(page, wrapper);
        currentPage.setTotal(totalCount);
        return selectPage(page, wrapper);
    }

    /**
     * 支持传LambdaQueryWrapper
     * 根据 entity 条件，查询当页记录（并翻页）
     * 支持 MYSQL分页
     * 该接口为自定义扩展接口，该total为总数据条数
     *
     * @param page         分页查询条件（可以为 RowBounds.DEFAULT）
     * @param queryWrapper 实体对象封装操作类（可以为 null）
     * @return
     */
    default <P extends IPage<T>> P selectCurrentPage(P page, @Param(Constants.WRAPPER) LambdaQueryWrapper<T> queryWrapper) {
        Long totalCount = selectCount(queryWrapper);
        queryWrapper.last("LIMIT " + page.offset() + "," + page.getSize());
        P currentPage = selectPage(page, queryWrapper);
        currentPage.setTotal(totalCount);
        return selectPage(page, queryWrapper);
    }

}